
//
//  BPOAuthViewController.swift
//  BPWeiBo
//
//  Created by apple on 16/4/9.
//  Copyright © 2016年 apple. All rights reserved.
//

import UIKit
import SVProgressHUD
class BPOAuthViewController: UIViewController,UIWebViewDelegate{

    let webViwe = UIWebView()
    
    //MARK:将我们的根视图view换成webView
    override func loadView() {
        view = webViwe
        
        //设置代理
        webViwe.delegate = self
        
    }
    
    override func viewDidLoad() {
        super.viewDidLoad()
        loadData()
        creatBarItem()

        
    }
    
    //将要显示的时候,隐藏遮盖
    override func viewWillDisappear(animated: Bool) {
        super.viewWillDisappear(animated)
        
        SVProgressHUD.dismiss()
    }
    
    //MARK:设置导航栏按钮
    private func creatBarItem() {
        //左边按钮
        let leftBarButton = UIBarButtonItem(imgName: String(), title: "返回", target: self, action: "pop")
        
        navigationItem.leftBarButtonItem = leftBarButton
        //右边按钮
        let rightBarButton = UIBarButtonItem(imgName: String(), title: "自动填充", target: self, action: "autoFill")
        navigationItem.rightBarButtonItem = rightBarButton
    }
    
    @objc private func pop() {
        
        dismissViewControllerAnimated(true, completion: nil)
    }
    
    @objc private func autoFill() {
        
        //创建js字符串
        let userStr = "document.getElementById('userId').value = '18210273021'"
        let passwdStr = "document.getElementById('passwd').value = '8329530'"
        //执行js代码
        webViwe.stringByEvaluatingJavaScriptFromString(userStr)
        webViwe.stringByEvaluatingJavaScriptFromString(passwdStr)
        let removeStr = "var tag = document.getElementsByClassName('input_note')[0];tag.parentNode.removeChild(tag);"
        webViwe.stringByEvaluatingJavaScriptFromString(removeStr)
    
    }
    //MARK:设置加载的界面
    private func loadData() {
        //使用webView加载授权界面
        let urlString = "https://api.weibo.com/oauth2/authorize?" + "client_id=" + "2022117409" + "&redirect_uri=" + "http://www.baidu.com"
        
        let url = NSURL(string: urlString)
        
        let request = NSURLRequest(URL: url!)
        
        webViwe.loadRequest(request)
    }
    
    //MARK:实现代理方法
    func webViewDidStartLoad(webView: UIWebView) {
        //SVProgressHUD.show()
        SVProgressHUD.showWithStatus("努力加载中...")
        
    }
    
    func webViewDidFinishLoad(webView: UIWebView) {
        
        
        title = webViwe.stringByEvaluatingJavaScriptFromString("document.title")
        //取消遮盖
        SVProgressHUD.dismiss()

    }
    
    //MARK:获取code,身份令牌
    /*
    URL=http://m.baidu.com/?code=236353ff34abb3edc3e61d2f0462fc4b&amp    */
    //当我们请求成功以后就会跳转到我们回调的界面,而我们的code就在我们回调的界面的URL的后面,所以我们必须在将要加载请求的时候获取到请求后面的code
    func webView(webView: UIWebView, shouldStartLoadWithRequest request: NSURLRequest, navigationType: UIWebViewNavigationType) -> Bool {
    
        //1.获取请求的字符串
        let urlStr = request.URL?.absoluteString ?? ""
        
        //2.判断请求的字符串中是否包含有"code="的这个字符,如果包含就表示请求的第成功的
        let flag = "code="
        
        if urlStr.containsString(flag) {
        
            //表示授权成功
            //截取我们的授权码code
            //2.1设置截取的范围
            let range = urlStr.rangeOfString(flag)
            //2.2从截取范围的最后一个字符开始截取
            let codeStr = urlStr.substringFromIndex((range?.endIndex)!)
            //2.3使用授权码,获取access_token->身份令牌
            BPUserInfoViewModel.sharedUserInfoViewModel.loadAccessToken(codeStr, finished: { (isSuccess) in
                //如果后面请求传过来的是false,就表示登陆不成功
                if !isSuccess {
                    SVProgressHUD.showErrorWithStatus("登陆失败")
                    return
                }
                
                //执行到这里就表示登陆成功
                SVProgressHUD.showSuccessWithStatus("登陆成功")

                //删除webView OAuth,它是model出来的,需要手动删除
                self.dismissViewControllerAnimated(false, completion: { () -> Void in
                    //跳转到欢迎界面,这种方法不建议使用,为了方便管理,我们使用通知
                    //UIApplication.sharedApplication().keyWindow?.rootViewController = BPWelcomeViewController()
                      NSNotificationCenter.defaultCenter().postNotificationName(notifcationName, object: nil)
                })
            })
            //不加载授权成功的回调界面
            return false
        }
        return true
    }
//
//    
//    //MARK:通过身份令牌,获取AccessToken返回的数据
//    private func loadAccessToken(code: String) {
//        let urlString = "https://api.weibo.com/oauth2/access_token"
//        print(code)
//        //设置参数
//        let parameters = ["client_id":client_id,
//                      "client_secret":client_secret,
//                         "grant_type":"authorization_code",
//                               "code":code,
//                       "redirect_uri":redirect_uri]
//        
//        //通过我们封装的网络请求的工具类来获取数据
//        BPAFNetworkingTool.sharedTools.request(.POST, urlString: urlString, parameters: parameters) { (respondData, error) -> () in
//            if error != nil {
//                print(error)
//                SVProgressHUD.showErrorWithStatus("世界上最遥远的距离是我不在你身边")
//                return
//            }
//            
//            //执行到这里就表示授权成功
//            print("授权成功")
//            //print(respondData)
//            //将结果解析出来
//            self.loadResult(respondData!)
//        }
//    
//    }
//    
//    //MARK:将解析出来的数据,转化成swift能够识别的数据
//    private func loadResult(respondData: AnyObject) {
//    
//        //1.将结果转化成字典
//        guard let dic = respondData as? [String : AnyObject] else {
//        
//            SVProgressHUD.showErrorWithStatus("数据解析错误")
//            return
//        }
//        //2.如果执行到这里就表示转换成功,
//        //因为返回的数据里.AFN自动将数据转化成字典了所以我们只需要取对应的值就行
//        let token = dic["access_token"]!
//        let uid = dic["uid"]!
//        //获取用户接口信息的URL
//        let userStr = "https://api.weibo.com/2/users/show.json"
//        
//        //设置参数数组
//        let parameters = ["access_token" : token,"uid" : uid]
//        
//        //请求数据
//        BPAFNetworkingTool.sharedTools.request(.GET, urlString: userStr, parameters: parameters) { (respondData, error) -> () in
//            if error != nil {
//                print(error)
//                SVProgressHUD.showErrorWithStatus("世界上最遥远的距离就是没有网络")
//                return
//            }
//            
//            //print("获取用户信息成功")
//            //print(respondData)
//            //获取到成功的数据文件后,AFN默认返回的是一个子典,我们根据自己的需要将使用里面的数据
//            //首先将AnyObject?其转换成字典类型
//            guard var userInfoDict = respondData as? [String : AnyObject]  else
//            
//            {
//                
//                SVProgressHUD.showErrorWithStatus("数据结构错误")
//                return
//            }
//            
//            //执行到这里,表示转换成功
//            //然后将这个分散的字典进行合并一下
//            for (k,v) in userInfoDict {
//                userInfoDict[k] = v
//            }
//            
//            //将获取到的完整的信息存储到偏好设置中
//            let userDefaults =  NSUserDefaults.standardUserDefaults()
//            
//            //字典转模型
//            let userInfo = BPUserInfo(dict: userInfoDict)
//            
//            let keys = ["access_token","expires_in","uid","name","avatar_large"]
//            
//            //这里会报错,因为偏好设置数据里面为空
//            let dict = userInfo.dictionaryWithValuesForKeys(keys)
//            
//            //将数据保存到偏好设置中
//            userDefaults.setObject(dict, forKey:userInfoKey)
//            
//            //同步
//            userDefaults.synchronize()
//            
//            print(NSHomeDirectory())
//        }
//    
//    }

}
